package com.shenhaofeng.app.utils.screen;

import android.content.Context;
import android.graphics.Paint;


/**
 * 处理一些尺寸相关的工具集
 * Created by Administrator on 2016/7/25.
 */
public class DimenUtil {


    /**
     * dp转换px
     *
     * @param context
     * @param pxValue
     * @return
     */
    public static int dp2Px(Context context, int pxValue) {
        return (int) (context.getResources().getDisplayMetrics().density * pxValue);
    }


    /**
     * px转换dp
     *
     * @param context
     * @param dpValue
     * @return
     */
    public static int px2Dp(Context context, int dpValue) {
        return (int) (dpValue * 1.0f / context.getResources().getDisplayMetrics().density);
    }


    /**
     * sp转换px
     *
     * @param context
     * @param spValue
     * @return
     */
    public static int sp2Px(Context context, int spValue) {
        return (int) (context.getResources().getDisplayMetrics().scaledDensity * spValue);
    }


    /**
     * px转换sp
     *
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2Sp(Context context, int pxValue) {
        return (int) (pxValue * 1.0f / context.getResources().getDisplayMetrics().scaledDensity);
    }


    /**
     * 传入指定高度,转换成能显示完整的字体大小
     *
     * @param maxHeight
     * @return
     */
    public static int computeTextHeightPxValue(Context context, int maxHeight,int minFontSize,int maxFontSize) {
        return getMaxFontSize(context, maxHeight, minFontSize, maxFontSize);
    }


    /**
     * 通过递归获取指定高度下最大的字体大小
     *
     * @param context
     * @param maxHeight
     * @param size
     * @param maxFontSize 最大的字体大小限制,0为无限制
     * @return
     */
    private static int getMaxFontSize(Context context, int maxHeight, int size, int maxFontSize) {
        int pxValue = sp2Px(context, size);
        Paint paint = new Paint();
        paint.setTextSize(pxValue);
        Paint.FontMetrics fontMetrics = paint.getFontMetrics();
        float textHeight = fontMetrics.bottom - fontMetrics.top;
        if (maxHeight < textHeight) {
            return size;
        } else {
            if (maxFontSize != 0 && size == maxFontSize) {
                return maxFontSize;
            } else {
                return getMaxFontSize(context, maxHeight, size + 1, maxFontSize);
            }
        }
    }


}
